]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionSystem: Install pending updates on startup
authorFlorian Müllner <fmuellner@gnome.org>
Wed, 22 Jan 2020 14:09:05 +0000 (15:09 +0100)
committerverdre <jonas@dressler.it>
Thu, 30 Jan 2020 13:37:47 +0000 (13:37 +0000)
Now that we have a way to check for updates and download them, we
should actually apply them as well. Do this on startup before any
extensions are initialized, to make sure we don't run into any
conflicts with a previously loaded version.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/945

js/ui/extensionSystem.js

index 49e333fffa52dd8698303968e1cc68a21317dab9..4328597339dab6f0506958f729dee5d21baa17f3 100644 (file)
@@ -45,6 +45,7 @@ var ExtensionManager = class {
             return GLib.SOURCE_REMOVE;
         });
 
+        this._installExtensionUpdates();
         this._sessionUpdated();
     }
 
@@ -456,6 +457,21 @@ var ExtensionManager = class {
         }).forEach(extension => this.reloadExtension(extension));
     }
 
+    _installExtensionUpdates() {
+        FileUtils.collectFromDatadirs('extension-updates', true, (dir, info) => {
+            let fileType = info.get_file_type();
+            if (fileType !== Gio.FileType.DIRECTORY)
+                return;
+            let uuid = info.get_name();
+            let extensionDir = Gio.File.new_for_path(
+                GLib.build_filenamev([global.userdatadir, 'extensions', uuid]));
+
+            FileUtils.recursivelyDeleteDir(extensionDir, false);
+            FileUtils.recursivelyMoveDir(dir, extensionDir);
+            FileUtils.recursivelyDeleteDir(dir, true);
+        });
+    }
+
     _loadExtensions() {
         global.settings.connect(`changed::${ENABLED_EXTENSIONS_KEY}`,
             this._onEnabledExtensionsChanged.bind(this));